package dao

import (
	"time"
)

// 这是 Admin 的全局公开dao对象，被service层调用!
var AdminDao = adminDao{}

// 管理员表
// 这是 admin表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type Admin struct {
	Id            int32     `json:"id" form:"id" v:"id" db:"id"`
	Username      string    `json:"username" form:"username" v:"username" db:"username"`                             // 管理员名称
	Password      string    `json:"password" form:"password" v:"password" db:"password"`                             // 管理员密码
	LastLoginIp   string    `json:"last_login_ip" form:"last_login_ip" v:"last_login_ip" db:"last_login_ip"`         // 最近一次登录IP地址
	LastLoginTime time.Time `json:"last_login_time" form:"last_login_time" v:"last_login_time" db:"last_login_time"` // 最近一次登录时间
	Avatar        string    `json:"avatar" form:"avatar" v:"avatar" db:"avatar"`                                     // 头像图片
	AddTime       time.Time `json:"add_time" form:"add_time" v:"add_time" db:"add_time"`                             // 创建时间
	UpdateTime    time.Time `json:"update_time" form:"update_time" v:"update_time" db:"update_time"`                 // 更新时间
	Deleted       int8      `json:"deleted" form:"deleted" v:"deleted" db:"deleted" gm:"deleted"`                    // 逻辑删除
	RoleIds       string    `json:"role_ids" form:"role_ids" v:"role_ids" db:"role_ids"`                             // 角色列表

}

// 注意:这是 Admin 的私有dao对象，只能在dao层内使用!
type adminDao struct {
	InsertTemplate func(arg Admin) (int64, error)         //插入一条记录
	UpdateTemplate func(arg Admin) (int64, error)         //更新一条记录
	DeleteTemplate func(id int64) (int64, error)          `args:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (Admin, error)          `args:"id"` //根据传入的主键获取一条记录
	List           func(arg Page) ([]Admin, error)        //模糊分页查询
	Exist          func(username string) ([]Admin, error) `args:"username"`
	UpdateNoPass   func(arg Admin) (int64, error)
}

/*
// 这是 admin 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type AdminPostman struct {
id
username
password
last_login_ip
last_login_time
avatar
add_time
update_time
deleted
role_ids

}*/

// 这是 admin 表的批量请求参数
type AdminReq struct {
	List []Admin `json:"list" form:"list"`
}

// 这是 adminDao.List()方法的请求参数
type AdminList struct {
	Page
}

// go-jwt 中需要token保护的用户信息
type UmsJWTParma struct {
	Username string `json:"username" form:"username"`
	Password string `json:"password" form:"password"`
}
